/**
 * 
 */
package br.com.skynix.tcmc.model.enumeration;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada;

/**
 * @author mgrb
 * 
 */
public enum UnidadeFederativaEnum implements EntidadeEnumerada {
	AC("AC", "Acre", "Acre"), //
	AL("AL", "Alagoas", "Alagoas"), //
	AP("AP", "Amapa", "Amapa"), //
	AM("AM", "Amazonas", "Amazonas"), //
	BA("BA", "Bahia", "Bahia"), //
	CE("CE", "Ceará", "Ceará"), //
	DF("DF", "Dist. Federal", "Distrito Federal"), //
	ES("ES", "Esp. Santo", "Espirito Santo"), //
	GO("GO", "Goiás", "Goiás"), //
	MA("MA", "Maranhão", "Maranhão"), //
	MT("MT", "Mato Grosso", "Mato Grosso"), //
	MS("MS", "Mato Grosso S.", "Mato Grosso do Sul"), //
	MG("MG", "Minas Gerais", "Minas Gerais"), //
	PA("PA", "Pará", "Pará"), //
	PB("PB", "Paraiba", "Paraiba"), //
	PR("PR", "Paraná", "Paraná"), //
	PE("PE", "Pernambuco", "Pernambuco"), //
	PI("PI", "Piauí", "Piauí"), //
	RJ("RJ", "Rio de Jan.", "Rio de Janeiro"), //
	RN("RN", "R. Grande N.", "Rio Grande do Norte"), //
	RS("RS", "R. Grande S.", "Rio Grande do Sul"), //
	RO("RO", "Rondônia", "Rondônia"), //
	RR("RR", "Roraima", "Roraima"), //
	SC("SC", "Santa Catarina", "Santa Catarina"), //
	SP("SP", "São Paulo", "São Paulo"), //
	SE("SE", "Sergipe", "Sergipe"), //
	TO("TO", "Tocantins", "Tocantins"), //
	;

	private static Map<String, UnidadeFederativaEnum> ufs = new HashMap<String, UnidadeFederativaEnum>();
	static {
		for (UnidadeFederativaEnum uf : EnumSet
				.allOf(UnidadeFederativaEnum.class)) {
			ufs.put(uf.getCodigo(), uf);
		}
	}

	private String codigo;

	private String textoCurto;

	private String textoLongo;

	/**
	 * @param codigo
	 * @param textoCurto
	 * @param textoLongo
	 */
	private UnidadeFederativaEnum(String codigo, String textoCurto,
			String textoLongo) {
		this.codigo = codigo;
		this.textoCurto = textoCurto;
		this.textoLongo = textoLongo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.com.skynix.tcmc.base.enumeration.entidadeEnumerada#getCodigo()
	 */
	@Override
	public String getCodigo() {
		return codigo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.enumeration.entidadeEnumerada#getTextoCurto()
	 */
	@Override
	public String getTextoCurto() {
		return textoCurto;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.enumeration.entidadeEnumerada#getTextoLongo()
	 */
	@Override
	public String getTextoLongo() {
		return textoLongo;
	}

	public static UnidadeFederativaEnum getUF(String ufSigla) {
		return ufs.get(ufSigla);
	}

	public static Collection<UnidadeFederativaEnum> listAll() {
		List<UnidadeFederativaEnum> estados = new ArrayList<UnidadeFederativaEnum>(
				ufs.values());
		Collections.sort(estados, new Comparator<UnidadeFederativaEnum>() {

			@Override
			public int compare(UnidadeFederativaEnum o1,
					UnidadeFederativaEnum o2) {
				return o1.getCodigo().compareTo(o2.getCodigo());
			}
		});
		return estados;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Enum#toString()
	 */
	@Override
	public String toString() {
		return codigo;
	}

}
